package com.augusto.sistema.vendas.venda;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

import com.augusto.sistema.vendas.cliente.Cliente;
import com.augusto.sistema.vendas.cliente.ClienteRN;
import com.augusto.sistema.vendas.produto.Produto;
import com.augusto.sistema.vendas.produto.ProdutoRN;

@ManagedBean(name = "registroVendas")
@ViewScoped
public class ResgistroVendaBean {
	private Cliente clienteSelecionado;
	private Produto produtoSelecionado = new Produto();
	private List<Produto> carinhoCompras = new ArrayList<Produto>();
	private List<SelectItem> clientesSelect;
	
	private float valorTotal;
	
	
	public String buscarProduto(){
		ProdutoRN produtoRN = new ProdutoRN();
		Produto produtoPesquisado = new Produto();
		
		try {
			if (produtoSelecionado.getDescricao() != null && !produtoSelecionado.getDescricao().equals("")) {
				try {
					produtoPesquisado = produtoRN.pesquisarPorDescricao(produtoSelecionado.getDescricao());
				} catch (Exception e) {
					e.printStackTrace();
					System.out.println("deu erro aqui -> "+ e.getMessage());
				}
				
				
				if (produtoPesquisado != null) {
					this.carinhoCompras.add(produtoPesquisado);
					calcularTotal();
				}
			}
		} catch (Exception e) {
			System.out.println("Deu problema " + e.getMessage() +" - ");
			e.printStackTrace();
		}
		
		
		return null;
	}
	

	private void calcularTotal() {
		this.valorTotal = 0;
		if (!this.carinhoCompras.isEmpty()) {
			for (Produto p : this.carinhoCompras) {
				valorTotal += p.getValor();
			}
		}
		
	}

	public String finalizarVenda(){
		if (!this.carinhoCompras.isEmpty()) {
			ArrayList<Venda> vendas = new ArrayList<Venda>();
			
			for (Produto p : this.carinhoCompras) {
				if (this.clienteSelecionado != null) {
					vendas.add(new Venda(p, this.clienteSelecionado));
				}
			}
			for (Venda venda : vendas) {
				VendaRN vendaRN = new VendaRN();
				venda.setDataVenda(new Date());
				vendaRN.registrarVenda(venda);
			}
		}
		return null;
	}

	public String excluirProdutoCarrinho(){
		if (this.carinhoCompras != null && !this.carinhoCompras.isEmpty()) {
			if (this.produtoSelecionado != null) {
				this.carinhoCompras.remove(this.produtoSelecionado);
				calcularTotal();
			}
		}
		return null;
	}
	
	public Cliente getClienteSelecionado() {
		return clienteSelecionado;
	}

	public void setClienteSelecionado(Cliente clienteSelecionado) {
		this.clienteSelecionado = clienteSelecionado;
	}

	public Produto getProdutoSelecionado() {
		return produtoSelecionado;
	}

	public void setProdutoSelecionado(Produto produtoSelecionado) {
		this.produtoSelecionado = produtoSelecionado;
	}

	public List<Produto> getCarinhoCompras() {
		return carinhoCompras;
	}

	public void setCarinhoCompras(List<Produto> carinhoCompras) {
		this.carinhoCompras = carinhoCompras;
	}

	public float getValorTotal() {
		return valorTotal;
	}

	public void setValorTotal(float valorTotal) {
		this.valorTotal = valorTotal;
	}


	public List<SelectItem> getClientesSelect() {
		if (clientesSelect == null) {
			
			clientesSelect = new ArrayList<SelectItem>();
			
			ClienteRN clienteRN = new ClienteRN();
			List<Cliente> listaClientes = clienteRN.listar();
			
			if (listaClientes != null && !listaClientes.isEmpty()) {
				SelectItem item;
				for (Cliente clienteLista : listaClientes) {
					item = new SelectItem(clienteLista, clienteLista.getNome());
					clientesSelect.add(item);
				}
				
			}
		}
		
		return clientesSelect;
	}

	
}
